package com.typing.utils;

import com.typing.entity.FileEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * 文件上传工具类
 */
public class FileTools {


	/**
	 * 封装上传文件
	 *
	 * @param file
	 * @param fileEntity
	 * @return
	 */
	public static FileEntity uploadFile(MultipartFile file, FileEntity fileEntity) {
		//	原文件名
		String filename = file.getOriginalFilename();

		//	设置新的文件名
		String newFileName = fileRename(filename);

		try {
			File Path = new File(fileEntity.getSavePath() + fileEntity.getRelativePath(), newFileName);
			//	判断有没有这个文件
			if (!Path.exists()) {
				//	没有就创建
				Path.mkdirs();
			}
			file.transferTo(Path);

		} catch (IOException e) {
			e.printStackTrace();

		}
		//	设置实体类中的属性
		FileEntity resultFile = new FileEntity();
		resultFile.setRelativePath(fileEntity.getRelativePath());
		resultFile.setSavePath(fileEntity.getSavePath());
		resultFile.setFileName(newFileName);
		resultFile.setFileType(getFileType(filename));

		return resultFile;
	}

	/**
	 * 获取文件的类型
	 *
	 * @param fileName
	 * @return
	 */
	public static String getFileType(String fileName) {
		if (fileName == null) {
			throw new NullPointerException();
		}
		return fileName.substring(fileName.lastIndexOf("."));

	}

	/**
	 * 通过uuid给文件重命名
	 *
	 * @param fileName
	 * @return
	 */
	public static String fileRename(String fileName) {
		if (fileName == null) {
			throw new NullPointerException();
		}
		return UUID.randomUUID() + getFileType(fileName);
	}

	/**
	 * 用于判断有无文件
	 *
	 * @param fileName
	 * @return
	 */
	public static boolean hasFile(String fileName) {
		return fileName != null && !"".equals(fileName);
	}
}
